home *** CD-ROM | disk | FTP | other *** search
/ CD Actual 9 / CDACTUAL9.iso / share / Dos / VARIOS / pascal / WIN-OS2.SWG / 0001_WIN VER & MODE.pas next >
Encoding:
Pascal/Delphi Source File  |  1996-02-21  |  4.0 KB  |  155 lines

  1.  
  2. unit win_ver; {detect Windows = present, version, & mode }
  3.   {NOTE: use post 3.1 version detection before pre 3.1}
  4. interface
  5.   {post 3.1}
  6.   procedure windows_version( var major, minor : byte );
  7.   procedure windows_mode( var mode : byte );
  8.   {pre 3.1}
  9.   procedure enhanced_mode_present ( var present : boolean);
  10.   procedure windows_present( var present : boolean );
  11.   procedure windows_386_present( var present : boolean );
  12.   procedure windows_3_0_mode( var mode : byte );
  13. implementation
  14.   {win 3.1+ only}
  15.   procedure windows_version( var major, minor : byte ); {0,0 = not detected}
  16.   begin asm
  17.        push es;
  18.        mov ax, 160ah; int 2fh
  19.  
  20.        cmp ax,0
  21.        je  @windows_present
  22.        @windows_not_present:
  23.        mov byte ptr major, 0; mov byte ptr minor, 0
  24.        jmp @end_procedure
  25.        @windows_present:
  26.        mov al, bh; les di, major; stosB
  27.        mov al, bl; les di, minor; stosB
  28.  
  29.        @end_procedure:
  30.        pop es
  31.   end; end;
  32.   {win 3.1+ only}
  33.   procedure windows_mode(var mode : byte ); {0=unknown}
  34.   begin asm
  35.        push es
  36.        mov ax, 160ah; int 2fh
  37.  
  38.        cmp ax,0
  39.        jne  @windows_not_present
  40.        @windows_present:
  41.        mov ax, cx;
  42.        jmp @end_procedure
  43.        @windows_not_present:
  44.        mov ax, 0
  45.        @end_procedure:
  46.        les di, mode; stosB
  47.        pop es
  48.   end; end;
  49.   {pre win 3.1}
  50.   { ax=1600h := windows not running  }
  51.   { ax=80h or ffh := win/386 running }
  52.   procedure enhanced_mode_present (var present : boolean);
  53.   begin asm
  54.        push es
  55.        mov ax, 1600h; int 2fh
  56.  
  57.        cmp ax, 1600h
  58.        jne @enhanced_mode_present
  59.        @not_endhanced_mode:
  60.        mov ax, 0
  61.        jmp @end_function
  62.        @enhanced_mode_present:
  63.        mov ax, 0ffffh
  64.  
  65.        @end_function:
  66.        les di, present; stosB
  67.        pop es
  68.   end; end;
  69.   {pre win 3.1}
  70.   {al = ff or 80 = windows/386 running}
  71.   procedure windows_386_present( var present : boolean );
  72.   begin asm
  73.        push es
  74.        mov ax,4680h; int 2fh
  75.  
  76.        cmp ax,0
  77.        jne @not_present
  78.        cmp al,0ffh
  79.        je   @present
  80.        cmp al,080h
  81.        jne  @not_present
  82.        @present:
  83.        mov ax, 0ffffh
  84.        jmp @end_procedure
  85.        @not_present:
  86.        mov ax, 0
  87.  
  88.        @end_procedure:
  89.        les di, present; stosB
  90.        pop es
  91.   end; end;
  92.   {pre win 3.1}
  93.   procedure windows_present( var present : boolean );
  94.   begin asm
  95.        push es
  96.        mov ax,4680h; int 2fh
  97.  
  98.        cmp ax,0
  99.        jne @not_present
  100.        @present:
  101.        mov ax, 0ffffh
  102.        jmp @end_function
  103.        @not_present:
  104.        mov ax, 0h
  105.  
  106.        @end_function:
  107.        les di, present; stosB
  108.        pop es
  109.   end; end;
  110.   { call only if 3.0 has been identified }
  111.   { mode = 2 := real mode } { mode = 1 := standard mode }
  112.   { mode = 0 := unknown }
  113.   procedure windows_3_0_mode(var mode : byte);
  114.   begin asm
  115.        push es
  116.        mov ax,1605h; xor cx,cx; int 2fh  {simulate "windows restart"}
  117.  
  118.        cmp cx, 0ffffh
  119.        jne @real_mode
  120.        @standard_mode:
  121.        mov ax, 2              { 2 = standard mode }
  122.        jmp @end_procedure
  123.        @real_mode:
  124.        cmp cx,0
  125.        je  @is_real_mode
  126.        mov ax, 0              { 0 = mode unknown }
  127.        jmp @end_procedure
  128.        @is_real_mode:
  129.        mov ax, 1              { 1 = real mode }
  130.  
  131.        @end_procedure:
  132.        les di, mode; stosB
  133.        {termination notice should be here!}
  134.        pop es
  135.   end; end;
  136. end.
  137.  
  138. {  --------- Test driver for win_ver ---------------- }
  139.  
  140. uses win_ver;  var maj, min, mode : byte; bol:boolean;
  141. begin
  142.   windows_version( maj, min );
  143.   writeln(' win maj.min ',maj,'.',min);
  144.   windows_mode( mode );
  145.   writeln(' win mode :[3=enhance,2=standard,1=real(not_supported)] =',mode);
  146.   enhanced_mode_present( bol );
  147.   writeln(' enhanced mode? ',bol);
  148.   windows_present( bol );
  149.   writeln(' windows present (pre 3.1) ? ',bol);
  150.   windows_386_present( bol );
  151.   writeln(' windows 386 present(pre 3.1) ? ',bol);
  152.   windows_3_0_mode( mode );
  153.   writeln(' 3.0 mode [2 = standard, 1 = real, 0 = ?] = ',mode);
  154. end.
  155.